# -*- coding: utf-8 -*-

#    Copyright (C) 2014 by Promotux
#                       di Francesco Meloni snc - http://www.promotux.it/

#    Author: Francesco Meloni  <francesco@promotux.it>

#    This file is part of OdCollect.

#    OdCollect is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 2 of the License, or
#    (at your option) any later version.

#    OdCollect is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.

#    You should have received a copy of the GNU General Public License
#    along with OdCollect.  If not, see <http://www.gnu.org/licenses/>.



from web_lib.page import Page
from web_lib.webutils import *
from dao.Ente import Ente
from web_lib.session import Session
#from dao.Sessione import Sessione
#from dao.Setconf import SetConf
from web_lib.webutils import leggiInSessione
from dao.Main_News import MainNews

@expose('/italiaCives/dashboard')
@expose('/italiaCives/dashboard/<page>')
def dashboard_ic(req, subdomain=None, page=None):
    """
    Home page
    """

    ente_den = req.form.get("ente")
    id_ente = req.form.get("id_ente")
    if id_ente: #arrivo da login o da cambia comune
        ente = Ente().getRecord(id=int(id_ente))
        schema = ente.denominazione_breve.lower().replace(" ","")
        change_schema(req, schema)
        if leggiInSessione(sezione="Main", chiave="schema"):
            """ Questo è un cambia comune"""
            salvaInSessione(req, sezione="Main", chiave="schema", valore=schema)
            username = leggiInSessione(sezione="Main", chiave="username")
            md5_passwd = leggiInSessione(sezione="Main", chiave="md5_passwd")
            if username and md5_passwd:
                from dao.Operatore import Operatore
                rows = Operatore().select(username=str(username),
                        password=md5_passwd)
                if len(rows) == 1:
                    """ l'utente è registrato anche nel nuovo comune"""
                    id_oper = rows[0].id
                    salvaInSessione(req, sezione="Main", chiave="id_oper", valore=id_oper)
                else:
                    salvaInSessione(req, sezione="Main", chiave="id_oper", valore="")
        else:
            Session(req).start(schema=schema)
            #sid = self.req.cookies[COOKIENAME]
            #a = Sessione()
            #a.hash_sessione = sid
            #a.id_ente = id_ente
            #a.data_inserimento = datetime.datetime.now()
            #a.persist()

    elif not leggiInSessione(sezione="Main", chiave="schema"):
        pageData = {'file' : "ic/index",
                    "newss": MainNews().select(),
                    }
        return Page(req).render(pageData)
    else:
        schema = leggiInSessione(sezione="Main", chiave="schema")
        ente = Ente().select(denominazione_breve=schema)
        if ente:
            ente = ente[0]
            ente_den = ente.denominazione
    if not ente:
        pageData = {'file' : "ic/index"}
        return Page(req).render(pageData)


    if not leggiInSessione(sezione="Main", chiave="schema"):
        pageData = {'file' : "ic/index"}
        return Page(req).render(pageData)

    from dao.NewsCategory import NewsCategory
    from dao.News import News
    from dao.StatoSegnalazione import StatoSegnalazione
    from dao.PrioritaSegnalazione import PrioritaSegnalazione
    from dao.TipoSegnalazione import TipoSegnalazione
    from dao.Segnalazione import Segnalazione
    id_categoria = NewsCategory().select(denominazione_breve="eventi")
    if id_categoria:
        id_categoria=id_categoria[0].id
    else:
        id_categoria = None

    numero_segnalazioni = Segnalazione().count(batchSize=None) or 0
    numero_news = News().count(other_then_id_categoria=id_categoria, batchSize=None)  or 0
    numero_eventi = News().count(id_categoria = id_categoria, batchSize=None)    or 0
    tot_numero = numero_eventi+numero_news+numero_segnalazioni
    batchSize = 3
    if page:
        offset = batchSize*int(page)
        page = int(page)+1
    else:
        offset=0
        page=1
    if (offset+batchSize)>=tot_numero:
        page=0



    newss = News().select(other_then_id_categoria=id_categoria,offset=offset, batchSize=batchSize)
    for n in newss:
        setattr(n,"tipo","news")
    eventii = News().select(id_categoria = id_categoria,offset=offset, batchSize=batchSize)
    for n in eventii:
        setattr(n,"tipo","eventi")
    if leggiInSessione(sezione="Main", chiave="schema") and leggiInSessione(sezione="Main", chiave="id_oper"):
        id_oper = leggiInSessione(sezione="Main", chiave="id_oper")
        if id_oper:
            segnalaa = Segnalazione().select(offset=offset,batchSize=batchSize)
            for n in segnalaa:
                setattr(n,"publication_date",n.data_inserimento)
                setattr(n,"tipo","segnalazione")
    else:
        segnalaa = []
    uff = newss + eventii +segnalaa
    newlist = sorted(uff, key=lambda x: x.publication_date, reverse=True)
    pageData = {'file' : "ic/dashboard",
                    "ente_den": ente_den,
                    "dao_ente":ente,
                    "newss":newlist,
                    "eventii":eventii,
                    "segnalaa":segnalaa,
                    "page":page}
    return Page(req).render(pageData)


@expose('/italiaCives/dashboard_stream')
@expose('/italiaCives/dashboard_stream/<page>')
def dashboard_stream_ic(req, subdomain=None, page=None):
    """
    Home page
    """

    ente_den = req.form.get("ente")
    id_ente = req.form.get("id_ente")
    if id_ente:
        ente = Ente().getRecord(id=int(id_ente))
        schema = ente.denominazione_breve.lower().replace(" ","")
        change_schema(req, schema)
        Session(req).start(schema=schema)
    elif not leggiInSessione(sezione="Main", chiave="schema"):
        pageData = {'file' : "ic/index",
                    "newss": MainNews().select(),
                    }
        return Page(req).render(pageData)
    else:
        schema = leggiInSessione(sezione="Main", chiave="schema")
        #id_oper = leggiInSessione(sezione="Main", chiave="id_oper")
        ##print " SCHEMAAAAAAAAAAAAAAAAAAAAAAAA", schema, id_oper
        #if not id_oper:
            #pageData = {'file' : "ic/index",
                        #"newss": MainNews().select()}
            #return Page(req).render(pageData)

        ente = Ente().select(denominazione_breve=schema)
        if ente:
            ente = ente[0]
            ente_den = ente.denominazione
    if not ente:
        pageData = {'file' : "ic/index"}
        return Page(req).render(pageData)

    from dao.NewsCategory import NewsCategory
    from dao.News import News
    from dao.StatoSegnalazione import StatoSegnalazione
    from dao.PrioritaSegnalazione import PrioritaSegnalazione
    from dao.TipoSegnalazione import TipoSegnalazione
    from dao.Segnalazione import Segnalazione
    id_categoria = NewsCategory().select(denominazione_breve="eventi")
    if id_categoria:
        id_categoria=id_categoria[0].id
    else:
        id_categoria = None

    numero_segnalazioni = Segnalazione().count(batchSize=None) or 0
    numero_news = News().count(other_then_id_categoria=id_categoria, batchSize=None)  or 0
    numero_eventi = News().count(id_categoria = id_categoria, batchSize=None)    or 0
    tot_numero = numero_eventi+numero_news+numero_segnalazioni
    batchSize = 3
    if page:
        offset = batchSize*int(page)
        page = int(page)+1
    else:
        offset=0
        page=1
    if (offset+batchSize)>=tot_numero:
        page=0



    newss = News().select(other_then_id_categoria=id_categoria,offset=offset, batchSize=batchSize)
    for n in newss:
        setattr(n,"tipo","news")
    eventii = News().select(id_categoria = id_categoria,offset=offset, batchSize=batchSize)
    for n in eventii:
        setattr(n,"tipo","eventi")
    if leggiInSessione(sezione="Main", chiave="schema") and leggiInSessione(sezione="Main", chiave="id_oper"):
        id_oper = leggiInSessione(sezione="Main", chiave="id_oper")
        if id_oper:
            segnalaa = Segnalazione().select(offset=offset,batchSize=batchSize)
            for n in segnalaa:
                setattr(n,"publication_date",n.data_inserimento)
                setattr(n,"tipo","segnalazione")
    else:
        segnalaa = []
    uff = newss + eventii +segnalaa
    newlist = sorted(uff, key=lambda x: x.publication_date, reverse=True)
    pageData = {'file' : "ic/dashboard_stream",
                    "ente_den": ente_den,
                    "dao_ente":ente,
                    "newss":newlist,
                    "eventii":eventii,
                    "segnalaa":segnalaa,
                    "page":page}
    return Page(req).render(pageData)
